// utils/typeConverter.js

/**
 * 将类型字符串转换为对应的数字
 * @param {string} typeStr - 类型字符串
 * @returns {number} 对应的数字，如果找不到则返回默认值 0
 */
export const typeToNumber = (typeStr) => {
  const typeMap = {
    '其他': 0,
    '交通': 1,
    '住宿': 2,
    '餐饮': 3,
    '会议': 4
  }

  return typeMap[typeStr] ?? 0 // 如果找不到返回默认值 0
}

/**
 * 将数字转换为对应的类型字符串
 * @param {number} typeNum - 类型数字
 * @returns {string} 对应的字符串，如果找不到则返回 '其他'
 */
export const numberToType = (typeNum) => {
  const numberMap = {
    0: '其他',
    1: '交通',
    2: '住宿',
    3: '餐饮',
    4: '会议'
  }

  return numberMap[typeNum] ?? '其他'
}


/**
 * 将状态字符串转换为对应的数字
 * @param {string} statusStr - 状态字符串
 * @returns {number} 对应的数字，如果找不到则返回默认值 -1
 */
export const statusToNumber = (statusStr) => {
  const statusMap = {
    '差旅申请草稿': 0,
    '差旅申请未通过': 1,
    '差旅申请审核中': 2,
    '预支付款审核中': 3,
    '预支付款审核通过': 4,
    '报销申请未通过': 5,
    '报销申请审核中': 6,
    '报销支付审核中': 7,
    '已完成': 8
  }

  return statusMap[statusStr] ?? -1 // 如果找不到返回默认值 -1
}

/**
 * 将数字转换为对应的状态字符串
 * @param {number} statusNum - 状态数字
 * @returns {string} 对应的字符串，如果找不到则返回 '未知状态'
 */
export const numberToStatus = (statusNum) => {
  const numberMap = {
    0: '差旅申请草稿',
    1: '差旅申请未通过',
    2: '差旅申请审核中',
    3: '预支付款审核中',
    4: '预支付款审核通过',
    5: '报销申请未通过',
    6: '报销申请审核中',
    7: '报销支付审核中',
    8: '已完成'
  }

  return numberMap[statusNum] ?? '未知状态'
}


/**
 * 将分转换为元（支持保留小数）
 * @param {number|string} cents - 分的数值
 * @param {number} decimals - 保留的小数位数，默认2位
 * @returns {number} 转换后的元数值
 */
export const centsToYuan = (cents, decimals = 2) => {
  if (cents === null || cents === undefined || cents === '') {
    return 0
  }

  const num = Number(cents)
  if (isNaN(num)) {
    return 0
  }

  const yuan = num / 100
  return Number(yuan.toFixed(decimals))
}

/**
 * 将分转换为元格式化的字符串
 * @param {number|string} cents - 分的数值
 * @param {number} decimals - 保留的小数位数，默认2位
 * @returns {string} 格式化后的元字符串
 */
export const centsToYuanString = (cents, decimals = 2) => {
  const yuan = centsToYuan(cents, decimals)
  return yuan.toFixed(decimals)
}


/**
 * 将元转换为分
 * @param {number|string} yuan - 元的数值
 * @returns {number} 转换后的分数值
 */
export const yuanToCents = (yuan) => {
  if (yuan === null || yuan === undefined || yuan === '') {
    return 0
  }

  const num = Number(yuan)
  if (isNaN(num)) {
    return 0
  }

  // 处理浮点数精度问题，避免 12.99 * 100 = 1298.9999999999998 的情况
  const cents = Math.round(num * 100)
  return cents
}


// 工具函数：将数组格式的日期转换为字符串
export const formatDateFromArray = (dateArray) => {
  if (!dateArray || !Array.isArray(dateArray) || dateArray.length < 3) {
    return '';
  }
  const [year, month, day] = dateArray;
  // 注意：月份需要补零
  const monthStr = month.toString().padStart(2, '0');
  const dayStr = day.toString().padStart(2, '0');
  return `${year}-${monthStr}-${dayStr}`;
};

// 工具函数：将字符串转换为数组格式（如果需要回传给后端）
export const formatDateToArray = (dateString) => {
  if (!dateString) return null;
  const date = new Date(dateString);
  return [
    date.getFullYear(),
    date.getMonth() + 1, // 月份从0开始，所以要+1
    date.getDate()
  ];
};


// 输出: { startTime: "2025-11-16", endTime: "2025-11-20" }
